package ve.usb.buscame;

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Hashtable;
import java.util.Queue;

import android.app.ListActivity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.text.method.ScrollingMovementMethod;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;


public class Principal extends ListActivity {
	
	static String seleccion;
	static String cabeza ="";
	private static final int HELLO_ID = 1;
	static boolean salir = false;
	final static Handler handler = new Handler();
	Cliente cliente = new Cliente();
	Thread hilo = new Thread(cliente);
	

	
	//HashTable de la forma <Id,ColaMensajes>
	static Hashtable<String, Queue<String>> conv = new Hashtable<String, Queue<String>>();
//	static final String[] opciones = new String[] {
//		"Amigos online", "Amigos offline", "Agregar amigos",
//		"Solicitudes recibidas", "Solicitudes por aceptar", "Salir"
//	  };
	static final String[] opciones = new String[] {
	"Mis grupos", "Agregar grupos", "Agregar amigos",
	"Solicitudes recibidas", "Solicitudes por aceptar", "Salir"
	};
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
	  super.onCreate(savedInstanceState);
	  setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, opciones));
	  salir = false;
	  //Hilo que se encarga de la escritura de los mensajes
	  hilo.start();
	  Log.d("Principal", "Principal salir: "+salir); 
	  startActivityForResult(new Intent( this, EscucharCliente.class),0);
    
	}
	
	 public void onListItemClick(ListView parent, View v,int position, long id) {   
		 Toast.makeText(this, 
		 "Seleccionaste a:  " + opciones[position], 
		 Toast.LENGTH_SHORT).show();
		 if (opciones[position].trim().equals("Mis grupos")){
			 startActivityForResult(new Intent( this, MisGrupos.class),0);
		 }else if ((opciones[position].trim().equals("Agregar grupos"))){
			startActivityForResult(new Intent( this, AgregarGrupos.class),0);
		 }else if ((opciones[position].trim().equals("Agregar amigos"))){
			 startActivity(new Intent( this, AgregarAmigos.class));
		 }else if ((opciones[position].trim().equals("Solicitudes recibidas"))){
			 startActivityForResult(new Intent( this, Pendientes.class), 0);
		 }else if ((opciones[position].trim().equals("Solicitudes por aceptar"))){
			 startActivityForResult(new Intent( this, Enviadas.class), 0);
		 }else if ((opciones[position].trim().equals("Salir"))){
			 salir = true; 
			 //enviar mensaje al server diciendo que cierre la conexion y
			 try {
				PrintWriter out = new PrintWriter
					(new BufferedWriter( new OutputStreamWriter(Cliente.socket.getOutputStream())),true);
				out.println("Salir|x");
   			 	out.flush();
			 } catch (IOException e) {
				e.printStackTrace();
			 }
			 //TODO Ojo con esto porque explota si conversacion nunca se ha iniciado.
			 if (Conversacion.entreConversacion){
				 Conversacion.editor.clear();
				 Conversacion.editor.commit();
			 }
			 finish();
		 }
		 seleccion = opciones[position];
	}  
	 
    final static Runnable actualizarScreen = new Runnable() {
        public void run() {
        	while(!conv.get(Cliente.userConv).isEmpty()){
        		Log.d("Principal", "Metodo actualizarScreen. Tengo mensajes de: " + Cliente.userConv);
        		String mensaje = conv.get(Cliente.userConv).remove();
        		Conversacion.textView.append(Cliente.userConv + " dice: " + mensaje + "\n");
        		Log.d("Principal","Se debio imprimir en pantalla: " + mensaje);
                Conversacion.ajustarScroll(Conversacion.textView);
                Conversacion.textView.setMovementMethod(ScrollingMovementMethod.getInstance());
        	}
        }
    };
    
    //Para que el usuario no pueda darle al boton de atras.
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            //moveTaskToBack(true);
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
    
    public void notificaciones() {
		String ns = Context.NOTIFICATION_SERVICE;
     	NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);
     	CharSequence tickerText = "Hello";
     	long when = System.currentTimeMillis();
     	Notification notification = new Notification(0, tickerText, when);
     	
     	Context context = getApplicationContext();
     	CharSequence contentTitle = "My notification";
     	CharSequence contentText = "Hello World!";
     	Intent notificationIntent = new Intent(this, Principal.class);
     	PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

     	notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
     	mNotificationManager.notify(HELLO_ID, notification);
	 }
    
}//fin de la actividad
